package com.wenli.graduate2022.wenliGreenShop.entity;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import lombok.AccessLevel;
import lombok.Data;
import lombok.Getter;

import java.io.Serializable;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

/**
 * 开启了mybatis的驼峰命名法就不要像数据库一样用_来表示大写了，驼峰命名法会自动将数据库有_的字段大写，如果JavaBean也像数据库一样用下划线来
 * 表示大小写的话，就刚刚好避过了属性与字段的对应，因为驼峰命名法对javaBean的属性不生效。
 * 要么属性与字段一模一样然后将驼峰命名法关掉；要么就开启驼峰命名法然后数据库用下划线，属性该大写大写；也可以自己写一个@Results然后作用于方法上。
 * @author HuangHai
 * @date 2021/9/26 16:41
 */
@Data
@JsonIgnoreProperties(value = { "hibernateLazyInitializer","handler" })//在实体类上用该注解，忽略因有属性为null而带来的json序列化报错问题
public class User implements Serializable {
    private Integer userId;
    private String userName;
    private String userNickname;
    private String userPassword;
    private String userRealname;
    private Byte userGender;
    //@JsonFormat(timezone="GMT+8", pattern="yyyy-MM-dd HH:mm:ss")//前端传入日期字符串【带有时分秒】，bean类接收JSON转换异常的解决方案
    //@JSONField(format="yyyy-MM-dd HH:mm:ss")//使用该注解需要导入fastjson依赖
    @Getter(AccessLevel.NONE)   //不希望lombok为某个属性生成get方法时用这个注解，因为我们要自己写这个转换规则
    private Date userBirthday;
    private Address userAddress;  //一个用户一个所在地地址（精确地址），一对一
    private Address userHomeplace;   //一个用户一个家乡（省），一对一
    private String userProfilePictureSrc;

    public String getUserBirthday() {
        if (userBirthday != null) {
            SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd", Locale.UK);
            return simpleDateFormat.format(userBirthday);
        }
        return null;
    }

}
